package br.com.beyondclick.view;

import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

import org.apache.log4j.Logger;

import br.com.beyondclick.model.entity.Pedido;
import br.com.beyondclick.model.repository.PedidoRepository;
/**
 * @jsp.tag name="listarPedido" body-content="empty"
 */
public class ListaPedidoTag extends TagSupport{
	private static final long serialVersionUID = 1L;

	private final static Logger logger = Logger.getLogger(ListaPedidoTag.class);

	private Date inicio;
	private Date fim;

	@EJB(beanName="PedidoRepositoryBeanRemote")
	private PedidoRepository pedidoRepository;
	
	@Override
	public int doStartTag() throws JspException {
		try{
			HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();

			List<Pedido> pedidos = pedidoRepository.find(inicio, fim);
			Comparator<Pedido> comparatorPedido = new Comparator<Pedido>(){
				public int compare(Pedido pedido1, Pedido pedido2) {
					int nome = pedido1.getOrgao().getNome().compareTo(pedido2.getOrgao().getNome());
					int data = pedido1.getData().compareTo(pedido2.getData());
					return nome==0 || data==0?
							nome + data :
							nome * data;
				}
			};

			Collections.sort(pedidos, comparatorPedido);
			request.setAttribute("pedidos", pedidos);
		}catch(Exception e){
			logger.warn("Erro ao recuperar a lista de pedidos.", e);
		}
		
		return SKIP_BODY;
	}
	
	/** 
	 * @jsp.attribute rtexprvalue="true" required="false" type = "Date"
     * @param inicio - data de inicio.
     */
	public void setInicio(Date inicio) {
		this.inicio = inicio;
	}

	/** 
	 * @jsp.attribute rtexprvalue="true" required="false" type = "Date"
	 * @param fim - data de fim.
	 */
	public void setFim(Date fim) {
		this.fim = fim;
	}
}